// 散列表
#ifndef HASH_TABLE_H
#define HASH_TABLE_H

#define TABLE_SIZE 100
#define NULL_KEY -32768

typedef struct
{
	int *elem; // 元素的地址
	int count; // 哈希表中元素个数
} HashTable;

// 除数因子
int m = TABLE_SIZE - 1;

/**
 * 根据键计算地址，使用除数留余法
 * @param key 键（关键字）
 * @return 计算得到的地址
 */
int getHash(int);

/**
 * 初始化散列表
 * @param table 传入空的散列表引用
 */
void initHashTable(HashTable &);

/**
 * 插入键
 * @param table 散列表引用
 * @param key 插入的键
 */
void putTable(HashTable &, int);

/**
 * 取得键
 * @param table 散列表引用
 * @param key 要取得的键
 * @return 返回的键的地址（在散列表中的下标），不存在返回-1
 */
int getTable(HashTable &, int);

#include "./hash-table.cpp"

#endif